﻿/**
 * \brief 任务队列
 * \file CTaskQueue
 */

#ifndef __CTASK__QUEUE__H
#define __CTASK__QUEUE__H

#include <queue>
#include <deque>
#include <list>

#include "Log.h"
#include "Mutex.h"

class CTcpTask;

/// 任务列表，非线程安全，线程内部使用
class CTaskList
{
	public:
		typedef std::list<CTcpTask*> _tasks;
		typedef _tasks::iterator _tasks_iter;

	public:
		CTaskList();

		virtual ~CTaskList();

		void setEpfd(int _epfd);

		bool empty() const;

		void _add(CTcpTask* pTask);

		/// 从列表上拿出一个
		CTcpTask* pop();

		void remove(CTcpTask* _pTask);
		void remove(_tasks_iter& iter);

	public:
		/// typedef std::queue<CTcpTask*, std::deque<CTcpTask*> > _tasks;
		/// typedef std::queue<CTcpTask*, std::deque<CTcpTask*> >::iterator _tasks_iter;

		_tasks _M_tasks;
		int _M_epfd;
};

/// 任务队列，线程安全
class CTaskQueue
{
	public:
		CTaskQueue();
		virtual ~CTaskQueue();

	public:
		/// 压入
		void push(CTcpTask* _pTask);

		/// 弹出
		CTcpTask* pop();

		/// 导出所有
		void checkExport(CTaskList& _taskList);

	private:
		typedef std::queue<CTcpTask*, std::deque<CTcpTask*> > _task_queue;
		_task_queue _M_queue;		/// 任务队列

		CMutex _M_mutex;		/// 互斥锁
};



#endif	/// __CTASK__QUEUE__H
